﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SCO.Comunication;
using SCO.BE;
using SCO.BL.Interfaces;
using SCO.BL.Service;
using SCO.DAO.Interfaces;
using SCO.DAO.SqlDataAdapter;
using System.Net;
using System.IO;
using System.Text;
namespace AppSCO.Controllers
{
    public class citasController : ReportManagement.PdfViewController
    {
        //
        // GET: /citas/

        public ActionResult generar()
        {
            IDaoFactory daoFactory = new DAOFactory();
            IListasService listasServices =  new ListasService(daoFactory);
            var model = new Models.citaModel();
            model.datosCita.listaEmpresa = (from c in listasServices.listaEmpresa() select new SelectListItem(){ Text = c.DESCRIPCION, Value = c.CODIGO.ToString() }).ToList();
            model.datosCita.listaOcupacion = (from c in  listasServices.listaOcupacion() select new SelectListItem(){ Text = c.DESCRIPCION, Value = c.CODIGO.ToString() }).ToList();
            model.datosPaciente.listaDistrito = (from c in listasServices.listaDistrito() select new SelectListItem() { Text = c.DESCRIPCION, Value = c.CODIGO.ToString() }).ToList();
            return View(model);
        }

        public JsonResult datosPacientePorDNI(Models.pacienteDataModel model) {
            //var comunication = new MicrosoftComunication();
            var comunication = new OracleComunication();
            var resultado = comunication.datosPersonaRENIEC(new pacienteBE() { DNIPAC = model.DNIPAC });
            return Json(new { datosPaciente = resultado });
        }

        public JsonResult datosPagoSAT(Models.citaDataModel model) {
            var comunication = new MicrosoftComunication();
            var resultado = comunication.datosDocumentoPagoSAT(new documentoPagoBE() { NUMDOCPAG = model.NUMDOCPAG });
            return Json(new { datosPago = resultado });
        }

        public JsonResult listarDisponibilidad(Models.citaDataModel model) {
            model.FECCITA = model.FECCITA.Trim(); //Convert.ToDateTime(model.FECCITA).ToString("yyyyMMdd");
            IDaoFactory daoFactory = new DAOFactory();
            IHorarioService horarioServices =  new HorarioService(daoFactory);
            var resultado = horarioServices.listaDisponibilidad(new horarioBE() { FECCITA = model.FECCITA });
            return Json(new { datosDisponibilidad = resultado });
        }

        public JsonResult listarDisponibilidadReprogramacion(Models.citaDataModel model)
        {
            model.FECCITA = model.FECCITA_REPRO.Trim();//Convert.ToDateTime(model.FECCITA_REPRO).ToString("yyyyMMdd");
            IDaoFactory daoFactory = new DAOFactory();
            IHorarioService horarioServices = new HorarioService(daoFactory);
            var resultado = horarioServices.listaDisponibilidad(new horarioBE() { FECCITA = model.FECCITA });
            return Json(new { datosDisponibilidad = resultado });        
        }

        public JsonResult generarCita(Models.citaModel model) {
            IDaoFactory daoFactory = new DAOFactory();
            ICitaService citaServices = new CitaService(daoFactory);
            string mensajeRespuesta = string.Empty;
            string tipoMensaje = string.Empty;
            var entidad = new citaBE() {
                NOMPAC = model.datosPaciente.NOMPAC,
                APEPPAC = model.datosPaciente.APEPPAC,
                APEMPAC = model.datosPaciente.APEMPAC,
                DNIPAC = model.datosPaciente.DNIPAC,
                FECNACPAC = model.datosPaciente.FECNACPAC,
                TELCPAC = model.datosPaciente.TELCPAC,
                TELHPAC = model.datosPaciente.TELHPAC,
                CORPAC = model.datosPaciente.CORPAC,
                DIRPAC = model.datosPaciente.DIRPAC,
                CODDIS = model.datosPaciente.CODDIS,
                SEXPAC = model.datosPaciente.SEXPAC,

                FECCITA = model.datosCita.FECCITA,
                CODHOR = model.datosCita.CODHOR,
                CODEMP = model.datosCita.CODEMP,
                CODOCU = model.datosCita.CODOCU,
                MANALI = (model.datosCita.MANALI.ToString().ToUpper() == "TRUE") ? "1" : "0",
                NUMDOCPAG = model.datosCita.NUMDOCPAG,
                MONPAG = model.datosCita.MONPAG,
                TIPPAG = model.datosCita.TIPPAG
            };
            var resultado = citaServices.grabar(entidad, ref  mensajeRespuesta, ref tipoMensaje);
            
            return Json(new { datoCita = resultado, mensaje = mensajeRespuesta, tipo = tipoMensaje });
        }

        public JsonResult datosCitaGenerada(Models.citaDataModel model)
        {
            IDaoFactory daoFactory = new DAOFactory();
            ICitaService citaServices = new CitaService(daoFactory);
            var resultado = citaServices.buscar(new citaBE() { NUMDOCPAG = model.NUMDOCPAG, TIPPAG = model.TIPPAG });
            if (resultado.FLGEST != "G") {
                resultado = null;                
            }
            return Json(new { datoCita = resultado });
        }

        public JsonResult reprogramarCita(Models.citaDataModel model) {
            IDaoFactory daoFactory = new DAOFactory();
            ICitaService citaServices = new CitaService(daoFactory);
            string mensajeRespuesta = string.Empty;
            string tipoMensaje = string.Empty;
            var entidad = new citaBE() {
                CODCIT = model.CODCIT,
                FECCITA = model.FECCITA_REPRO,
                CODHOR = model.CODHOR
            };
            var resultado = citaServices.reprogramarCita(entidad, ref mensajeRespuesta, ref tipoMensaje);
            return Json(new { datoCita = resultado, mensaje = mensajeRespuesta });
        }

        public ActionResult reprogramaCita()
        {
            var model = new Models.citaModel();
            return View(model);
        }

        public ActionResult citasGeneradas() {
            var model = new Models.administracionModel();
            return View(model);
        }

        public ActionResult citasCanceladas() {
            var model = new Models.administracionModel();
            return View(model);        
        }

        public ActionResult citasDesaprobadas()
        {
            var model = new Models.administracionModel();
            return View(model);
        }

        public ActionResult citasAprobadas() {
            var model = new Models.administracionModel();
            return View(model);
        }

        public JsonResult listaCitasGeneradas(string FLGEST, int Index)
        {
            IDaoFactory daoFactory = new DAOFactory();
            ICitaService citaServices = new CitaService(daoFactory);
            int totalPaginas = 0;
            int registros = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["Paginacion_registros"].ToString());
            var entidad = new  citaBE(){
                FLGEST = FLGEST
            };
            var listado = citaServices.listarPaginado(entidad, Index, registros, ref totalPaginas);
            return Json(new { datos = listado, indice = Index  ,paginas = totalPaginas });
        }

        public JsonResult listaCitasGeneradas_Delivery(string FLGEST, int Index)
        {
            IDaoFactory daoFactory = new DAOFactory();
            ICitaService citaServices = new CitaService(daoFactory);
            int totalPaginas = 0;
            int registros = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["Paginacion_registros"].ToString());
            var entidad = new citaBE()
            {
                FLGEST = FLGEST
            };
            var listado = citaServices.listarPaginado(entidad, Index, registros, ref totalPaginas);
            if (listado != null) {
                listado = listado.Where(c => c.FLGDEL == "N").ToList();
                if (listado.Count < 1) {
                    listado = null;
                }
            }
            return Json(new { datos = listado, indice = Index, paginas = totalPaginas });
        }



        public JsonResult restaurarCita(int CODCIT) {
            try
            {
                IDaoFactory daoFactory = new DAOFactory();
                ICitaService citaServices = new CitaService(daoFactory);
                citaServices.restaurarCita(CODCIT.ToString());
                return Json(new { mensajes = "Se restauro su cita satisfactoriamente" });
            }
            catch (Exception)
            {
                return Json(new { mensajes = "No se pudo restaurar su cita" });
            }
        }

        public ActionResult historialPaciente() {
            var model = new Models.administracionModel();
            return View(model);  
        }

        public JsonResult buscarHistorial(Models.filtroBusquedaHistorial model) {
            IDaoFactory daoFactory = new DAOFactory();
            ICitaService citaServices = new CitaService(daoFactory);
            var entidad = new citaBE()
            {
                DNIPAC = (string.IsNullOrEmpty(model.DNIPAC))?"0":model.DNIPAC,
                NOMPAC = (string.IsNullOrEmpty(model.NOMPAC))? "": model.NOMPAC
            };
            var resultado = citaServices.datosHistorialUsuario(entidad);
            return Json(new { datos = resultado });
        }

        public ActionResult reporteCancelados() {

            IDaoFactory daoFactory = new DAOFactory();
            ICitaService citaServices = new CitaService(daoFactory);
            var model = new Models.administracionModel();
            int totalPaginas = 0;
            int registros = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["Paginacion_registros"].ToString());
            var entidad = new citaBE()
            {
                FLGEST = "C"
            };
            var listado = citaServices.listarPaginado(entidad, 1, registros, ref totalPaginas);

            model.citasGeneradas = (from c in listado select new Models.citaGeneradaDataModel() { DNIPAC = c.DNIPAC, NOMPAC = c.NOMPAC, APEPPAC = c.APEPPAC, APEMPAC = c.APEMPAC, FECCITA = c.FECCITA, DESHOR = c.DESHOR,  }).ToList();
            //return View(model);            
            return ViewPdf("", "reporteCancelados", false, "reporte", model, "", null, null);
        }
    }
}
